perm filename CMS2C[T,LSP]1 blob
sn#649108 filedate 1982-03-15 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 MARCDO: PROCEDURE OPTIONS (MAIN)
C00013 ENDMK
C⊗;
MARCDO: PROCEDURE OPTIONS (MAIN);
/*THIS PROGRAM READS A LIBRARY INSTRUCTION DECKLET, PRINTS
IT OUT FROM THE STRUCTURE WHERE IT HAS BEEN STORED, AND
PRINTS OUT THE RECORD DIRECTORY*/
DECLARE
1 DECKLET,
2 CARDLET, /*SET OF MARC SPECS*/
3 TAG CHAR(3),
3 SIZE CHAR(1),
3 SUBF CHAR(16) VARYING,
3 SUBF CHAR(16) VARYING,
RECS FILE RECORD SEQUENTIAL, /*FILE CONTAINING DECKLETS*/
(SYSIN, SYSPRINT) FILE STREAM,
SUBSTR BUILTIN,
INDEX BUILTIN,
∂ UNSPEC BUILTIN,
∂ (DELIM,FT,RT) CHAR(1),
MARC FILE RECORD SEQUENTIAL;
∂
CALL DECKIT; /*ROUTINE TO READ IN AND PRINT OUT DECKLET*/
∂ CALL SPECSYM;/*ROUTINE TO ESTABLISH SPECIAL MARC SYMBOLS*/
∂ CALL MARCDIR; /*ROUTINE TO USE EXTRACTED RECORD DIRECTORY
∂ TO PRINT FIELDS*/
RETURN; /*RETURN CONTROL TO CMS*/
DECKIT: PROCEDURE;
/*THIS ROUTINE READS THE INFORMATION FROM THE DECKLET INTO
A STRUCTURE AND THEN PRINTS IT OUT*/
ON ENDFILE (SYSIN) EOF = '1'B;
OPEN FILE (RECS) OUTPUT;
DO WHILE (↑EOF);
GET SKIP EDIT (DECKLET.CARDLET) (A(3),A(1),A(16));
IF EOF THEN LEAVE;
WRITE FILE (RECS) FROM (DECKLET); /*CREATE RECORD*/
END;
CLOSE FILE (RECS);
EOF = '0'B; /*RESET END FLAG*/
ON ENDFILE (RECS) EOF = '1'B;
OPEN FILE (RECS) INPUT; /*OPEN FILE OF SPECS FOR INPUT*/
DO WHILE (↑EOF);
READ FILE (RECS) INTO (DECKLET.CARDLET);
IF EOF THEN LEAVE;
PUT SKIP EDIT (DECKLET.CARDLET) (A);
END;
CLOSE FILE (RECS);
RETURN; /*RETURN TO MAIN PROGRAM*/
END DECKIT;
MARCDIR: PROCEDURE;
/*THIS ROUTINE EXTRACTS AND PRINTS OUT THE MARC RECORD
DIRECTORY AND SUBFIELDS INDICATED BY DECKLET*/
DECLARE
1 DECKLET,
2 CARDLET, /*SET OF MARC SPECS*/
3 TAG CHAR(3),
3 SIZE CHAR(1),
3 SUBF CHAR(16) VARYING,
(I,J,K,L) FIXED BIN (15),
AREA CHAR(2000) VARYING,
FIELD(50) CHAR(12),
∂ DELIM CHAR(1),
PRINT BIT(1),
LENGTH FIXED BIN(15),
START FIXED BIN(15),
DIR CHAR(500) VARYING; /*EXTRACTED DIRECTORY*/
OPEN FILE (MARC) INPUT; /*OPEN THE FILE OF MARC RECS FOR INPUT*/
EOF = '0'B;
∂D PUT SKIP EDIT ('TAG','LENGTH','POSITION') (A(3),X(10),A(6),
∂D X(10),A(8));
∂D
∂ DO I = 1 TO 2;/*TRY THIS TWICE*/
∂ PUT SKIP(3) EDIT ('RECORD NUMBER ',I);
∂ PUT SKIP(2) EDIT ('TAG','SUBFIELD','CONTENTS') (A(3),X(10),A(8),
∂ X(10),A(8));
∂ PUT SKIP;
READ FILE (MARC) INTO (AREA);
J = SUBSTR(AREA, 13, 5); /*GET STARTING POS. OF CONTROL
FIELDS*/
∂ CHOP: /*DIVIDE INTO BLOCKS*/
DO K = 1 TO (J-25)/12;
∂D CALL PRINTFRM (SUBSTR(DIR,L,3),SUBSTR(DIR,L+3,4),
∂D SUBSTR(DIR,L+7,5));
FIELD(K) = SUBSTR(DIR,L,12);/*START FILLING ARRAY
WITH FIELDS*/
L = L + 12; /*SKIP TO NEXT 12 CHARACTERS*/
END CHOP;
∂ CALL FLDPRT (FIELD,DECKLET,K,PRINT,J,AREA,DELIM);
END;
CLOSE FILE (MARC);
RETURN;/*RETURN TO MAIN PROGRAM*/
END MARCDIR;
∂ /*SUBROUTINE TO CREATE THE SPECIAL SYMBOLS MARKING
∂ DELIMITER, FIELD TERMINATOR, AND RECORD TERMINATOR*/
∂
∂ SPECSYM: PROCEDURE;
∂ DCL
∂ UNSPEC BUILTIN,
∂ (TDEL,TFT,TRT) FIXED BIN(8);
∂
∂ /*SET UP CONSTANTS*/
∂ TDEL = 250;/*HEX FA*/
∂ TFT = 38;/HEX 26*/
∂ TRT = 55;/*HEX 37*/
∂
∂ /*MOVE BINARY VALUES INTO CHAR STRING*/
∂ UNSPEC(DELIM) = TDEL;
∂ UNSPEC(RT) = TRT;
∂ UNSPEC(FT) = TFT;
∂
∂ RETURN;
∂ END SPECSYM;
∂D /*SUBROUTINE TO FORMAT DIRECTORY*/
∂D PRINTFRM: PROCEDURE (TAG,LEN,POS);
∂D DCL
∂D TAG CHAR (3),
∂D LEN CHAR (4),
∂D POS CHAR (5);
∂D
∂D PUT SKIP EDIT (TAG,LEN,POS)(A(3), X(11),A(4),X(13),A(5));
∂D RETURN;
∂D END PRINTFRM;
∂D
/*SUBROUTINE TO PRINT OUT FIELDS LISTED IN DECKLET*/
∂ FLDPRT: PROCEDURE (FIELD,DECKLET,K,PRINT,J,AREA,DELIM);
DECLARE
1 DECKLET CONNECTED,
2 CARDLET, /*SET OF MARC SPECS*/
3 TAG CHAR(3),
3 SIZE CHAR(1),
3 SUBF CHAR(16) VARYING,
FIELD(*) CHAR(12),
K FIXED BIN(15),
J FIXED BIN(15),
START FIXED BIN(15),
LENGTH FIXED BIN(15),
AREA CHAR(2000) VARYING,
∂ DELIM CHAR(1),/*SPECIAL CHARACTER*/
∂ DELIM1 FIXED BIN(15),/*POS. OF FIRST DELIM*/
∂ DELIM2 FIXED BIN(15),/*POS. OF 2ND DELIM*/
∂ CONTROLS CHAR(200) VARYING,/*CONTROL FIELD*/
∂ REMAINDER CHAR(200) VARYING,
∂ P FIXED BIN(15),
N FIXED BIN(15);
EOF = '0'B;
ON ENDFILE (RECS) EOF = '1'B;
OPEN FILE (RECS) INPUT;
DO WHILE (↑EOF);
READ FILE (RECS) INTO (DECKLET.CARDLET);
IF EOF THEN LEAVE;
DO N = 1 TO (K-1);
IF (TAG = SUBSTR(FIELD(N),1,3)) THEN
∂ DO P = 1 TO SIZE;
∂ START = SUBSTR(FIELD(N),8,5) + J + 1;
∂ LENGTH = SUBSTR(FIELD(N),4,4);
∂ CONTROLS = SUBSTR(AREA,START,LENGTH);/*DON'T FORGET ;*/
∂D (A(LENGTH));
∂ DELIM1 = INDEX(CONTROLS,DELIM);
∂ DO WHILE (INDEX(CONTROLS,DELIM)) ↑= 0;
∂ REMAINDER = SUBSTR(CONTROLS,(DELIM1 + 1));
∂ DELIM2 = INDEX(REMAINDER,DELIM);
∂ IF SUBSTR(SUBF,P,1) = SUBSTR(CONTROLS,
∂ (DELIM1 + 1),1) THEN
∂ PUT SKIP EDIT (TAG,SUBF,SUBSTR(CONTROLS,
∂ (DELIM1 + 2),(DELIM2 - 1))) (A(3),X(13),
∂ A(1),X(14),A);
∂ DELIM1 = DELIM2;
∂ END;
∂ END;
END;
∂D END;
END;
CLOSE FILE (RECS);
RETURN;
END FLDPRT;
END MARCDO;